"""
十大歌神
NZD正在进行“十大歌神”评选，全校学生可以投票选出他们最喜欢的歌神。
编写一个程序来模拟这个投票和统计过程。
首先，使用random的方式生成100个人名（可以是中英文），然后用random的方法随机抽取这些人名填充到长度为1000的列表中，模拟1000次投票。最后，程序应统计出十大歌神，并特别打印出冠军的名字和所得票数。
"""

import random


def get_one_name():
    """
    生成一个人名
    """
    name = ''
    for i in range(5):
        n = random.choice('abcdefghijklmnopqrstuvwxyz')
        name += n
    name = name.title()    # 头字母大写
    return name


def generate_names(num):
    # 这里只是一个简单的示例，你可以使用更复杂的逻辑来生成中英文名字
    names = []
    for i in range(num):
        name = get_one_name()
        names.append(name)
    return names


def get_max(dic):
    """
    找出字典内的最大 value 的键值对
    """
    name = ""       # 假设的人名
    vote = 0        # 假设最高票
    for k, v in dic.items():        # 遍历字典的键值对
        if v > vote:
            vote = v
            name = k
    return name, vote


def NZD_top_singers():
    names = generate_names(100)  # 生成100个人名     [Adome, Tom, Jess, ....]

    count = {}      # 计票容器
    for i in range(1000):
        name = random.choice(names)     # 随机抽取一个人来投票
        if name in count:
            count[name] = count.get(name) + 1
        else:
            count[name] = 1

    # 计算投票逻辑
    top1_name, top1_vote = get_max(count)       # 得到了冠军和票数
    count.pop(top1_name)                        # 弹出冠军
    print(f"第1名是： {top1_name}，得票：{top1_vote}")

    for i in range(2, 11):      # 第二名到第十名
        top2_name, top2_vote = get_max(count)
        count.pop(top2_name)
        print(f"第{i}名是： {top2_name}，得票：{top2_vote}")


if __name__ == '__main__':
    NZD_top_singers()
